package servlets;

import java.io.IOException;
import java.sql.Connection;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import model.Teilnehmer;
import service.TerminplanerConnectionPool;
import service.TerminplanerService;
import service.TokenStore;

@WebServlet("/AddTeilnehmerServlet")
public class AddTeilnehmerServlet extends HttpServlet{

  private static final long serialVersionUID = 1L;
  
  
  public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    request.getSession().setAttribute("token", TokenStore.getInstance().createToken());

    
    request.setAttribute("TerminId", request.getParameter("TerminId"));
    request.getRequestDispatcher("/WEB-INF/jsps/addTeilnehmer.jsp").forward(request, response);
  }
  
  public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    String requestguid = request.getParameter("token");
    if (!TokenStore.getInstance().verifyToken(requestguid)) {
      request.setAttribute("exception", "DoubleSubmit wurde abgefangen");
      request.getRequestDispatcher("/WEB-INF/jsps/error.jsp").forward(request, response);
      return;
    }
    
    Connection con = null;
    Long terminId = null;
    Long teilnehmerId = null;
    
    try {
    teilnehmerId = Long.parseLong(request.getParameter("TeilnehmerId"));
    }
    catch (Exception e)
    {}
    
    String anrede = request.getParameter("anrede");
    String vorname = request.getParameter("vorname");
    String nachname = request.getParameter("nachname");

    
    try {
      
      terminId = Long.parseLong(request.getParameter("TerminId"));
  
      con  = TerminplanerConnectionPool.getInstanz().getConnection();
      Teilnehmer teilnehmer = new Teilnehmer(vorname, nachname, anrede);
      teilnehmer.setTermin(TerminplanerService.getInstanz().getTermin(con, terminId));
      if(teilnehmerId != null)
         teilnehmer.setID(teilnehmerId);
      TerminplanerService.getInstanz().saveTeilnehmer(con, teilnehmer);
    } catch (Exception e) {
      request.setAttribute("exception", e.getMessage());
      request.getRequestDispatcher("/WEB-INF/jsps/error.jsp").forward(request, response);
      e.printStackTrace();
      return;
    }
    finally{
    TerminplanerConnectionPool.getInstanz().saveClose(con);
  }

    response.sendRedirect("TerminServlet?TerminId="+request.getParameter("TerminId"));
    
    
  }
  

}
